from selenium.webdriver.support.wait import WebDriverWait
from config import config
from selenium.webdriver.common.by import By
from common.base_page import BasePage
from selenium.webdriver.support import expected_conditions as EC


class LoginPage(BasePage):
    """登录页面操作：
        1. 刷新登录页面
        2. 登录操作：定位用户名、输入手机号、定位密码、输入密码、定位登录、点击提交
        3. 获取返回的信息
    """
    url = config.HOST + "/User/login.html"
    #元素定位器，使用placeholder
    #//：表示从当前节点开始，在整个文档中递归搜索，不考虑元素的层级位置。 input：指定要查找的元素类型（标签名），这里是 <input> 标签。
    #[@placeholder="请输入邮箱/手机号/账号"]这是一个属性筛选条件，表示只选择带有特定属性值的元素。
    phone_locator = (By.XPATH, '//input[@placeholder="请输入邮箱/手机号/账号"]')
    pwd_locator = (By.XPATH, '//input[@placeholder="请输入密码"]')
    #.：表示当前节点的文本内容（包括子节点的文本）
    login_btn_locator = (By.XPATH, '//button[contains(., "登录")]')
    #错误提示（如 “密码错误，你还可以尝试 3 次”）是临时出现后消失的，需要用显式等待捕获。
    error_msg_locator = (By.XPATH,  '//StaticText[contains(., "密码错误")]')

    def get(self):
        """访问login页面"""
        self.driver.get(self.url)
        return self

    def login(self, mobile, pwd):
        """登录操作"""
        username_elem = self.find(self.phone_locator)
        username_elem.send_keys(mobile)
        pwd_elem = self.find(self.pwd_locator)
        pwd_elem.send_keys(pwd)
        self.click_element(self.login_btn_locator)
        return self


    #由于错误提示是临时出现的，必须用 WebDriverWait 等待元素出现（最多等待指定时间）：
    def get_error_msg(self):
        """获取错误信息"""
        e =WebDriverWait(self.driver,5).until(
            EC.visibility_of_element_located(self.error_msg_locator)
        )
        return e.text
